<?php

namespace app\admin\controller;

use think\Db;
use app\common\model\Config as ConfigModel;

/**
 * 系统配置
 * Class Config
 * @package app\admin\controller
 */
class Config extends Home
{
    /**
     * 配置管理
     */
    public function index()
    {
        /* 查询条件初始化 */
        $map = ['status' => 1];
        if (isset($_GET['group'])) {
            $map['group'] = input('group', 0);
        }
        if (isset($_GET['name'])) {
            $map['name'] = ['like', '%' . (string)I('name') . '%'];
        }

        $list = Db('config')->where($map)->order('create_time desc')->paginate(20);
        $page = $list->render();
        $list = $list->toArray();
//        // 记录当前列表页的cookie
//        Cookie('__forward__', $_SERVER['REQUEST_URI']);

        $this->assign('group', config('CONFIG_GROUP_LIST'));
        $this->assign('group_id', input('get.group', 0));
        $this->assign('_list', $list['data']);
        $this->assign('page', $page);
        $this->assign('title', '配置管理');
        return $this->fetch();
    }

    /**
     * 配置新增
     */
    public function add(ConfigModel $configModel)
    {
        if (request()->isPost()) {
            $data = request()->post();
            unset($data['id']);
            $validate = Validate('config');
            if (!$validate->check($data)) {
                $this->error($validate->getError());
            }

            $res = $configModel->save($data);
            if ($res) {
                $this->success('新增成功', url('index'));
            } else {
                $this->error('新增失败');
            }
        } else {
            $groups = config('CONFIG_GROUP_LIST');
            $types = config('CONFIG_TYPE_LIST');
            $this->assign('groups', $groups);
            $this->assign('types', $types);
            $this->assign('meta_title', '新增配置');
            $this->assign('info', null);
            $this->assign('action', url('add'));
            return $this->fetch('edit');
        }
    }

    /**
     * 编辑配置
     * @return mixed
     */
    public function edit(ConfigModel $configModel)
    {
        $id = input('id');
        if (request()->isPost()) {
            $data = request()->post();
            $validate = Validate('config');
            if (!$validate->check($data)) {
                $this->error($validate->getError());
            }
            $res = $configModel->save($data, ['id' => $id]);
            if ($res) {
                $this->success('更新成功', Cookie('__forward__'));
            } else {
                $this->error('更新失败！');
            }
        } else {
            /* 获取数据 */
            $info = $configModel->find($id);
            if (false === $info) {
                $this->error('获取配置信息错误');
            }
            $groups = config('CONFIG_GROUP_LIST');
            $types = config('CONFIG_TYPE_LIST');
            $this->assign('groups', $groups);
            $this->assign('types', $types);
            $this->assign('info', $info);
            $this->assign('action', url('edit'));
            $this->assign('meta_title', '编辑配置');
            return $this->fetch();
        }
    }

    /**
     * 批量保存配置
     */
    public function save($config)
    {
        if ($config && is_array($config)) {
            $Config = M('Config');
            foreach ($config as $name => $value) {
                $map = array('name' => $name);
                $Config->where($map)->setField('value', $value);
            }
        }
        S('DB_CONFIG_DATA', null);
        $this->success('保存成功！');
    }

    /**
     * 删除配置
     */
    public function del(ConfigModel $configModel)
    {
        $id = array_unique((array)input('id', 0));

        if (empty($id)) {
            $this->error('请选择要操作的数据!');
        }

        $id = implode(',', $id);
        if ($configModel->destroy($id)) {
//            S('DB_CONFIG_DATA', null);
//            //记录行为
//            action_log('update_config', 'config', $id, UID);
            $this->success('删除成功');
        } else {
            $this->error('删除失败！');
        }
    }

    // 获取某个标签的配置参数
    public function group()
    {
        if (request()->isPost()) {
            $data = $_POST;
            foreach ($data as $k => $v) {
                $config = Db('Config')->where('name', $k)->where('value', $v)->find();
                if(!$config){
                    $res = Db('Config')->where('name', $k)->setField('value', $v);
                    if(!$res){
                        $this->error('操作失败！');
                    }
                }
            }
            $this->success('操作成功', url(''));
        } else {
            $id = input('id', 1);
            $type = config('CONFIG_GROUP_LIST');
            unset($type['3'], $type['5'], $type['7'], $type['8']);
            $list = Db::name('config')->field('id,name,title,extra,value,remark,type')->order('sort asc')->where(['status' => 1, 'group' => $id])->paginate(20);
            if ($list) {
                $page = $list->render();
                $_list = $list->toArray();
                $data = $_list['data'];
                foreach ($data as $k => $v) {
                    $array = preg_split('/[,;\r\n]+/', trim($v['extra'], ",;\r\n"));

                    $extra = [];
                    foreach ($array as $val) {
                        $arr = explode(':', $val);
                        $extra[$arr[0]] = end($arr);
                    }
                    if ($extra) {
                        $data[$k]['extra'] = $extra;
                    }
                }
                $this->assign('_list', $data);
                $this->assign('_page', $page);
            }
            $this->assign('id', $id);
            $this->assign('type', $type);
            $this->assign('meta_title', $type[$id] . '设置');
            return $this->fetch();
        }
    }

    /**
     * 配置排序
     */
//    public function sort()
//    {
//        if (IS_GET) {
//            $ids = I('get.ids');
//
//            //获取排序的数据
//            $map = array('status' => array('gt', -1));
//            if (!empty($ids)) {
//                $map['id'] = array('in', $ids);
//            } elseif (I('group')) {
//                $map['group'] = I('group');
//            }
//            $list = M('Config')->where($map)->field('id,title')->order('sort asc,id asc')->select();
//
//            $this->assign('list', $list);
//            $this->meta_title = '配置排序';
//            $this->display();
//        } elseif (IS_POST) {
//            $ids = I('post.ids');
//            $ids = explode(',', $ids);
//            foreach ($ids as $key => $value) {
//                $res = M('Config')->where(array('id' => $value))->setField('sort', $key + 1);
//            }
//            if ($res !== false) {
//                $this->success('排序成功！', Cookie('__forward__'));
//            } else {
//                $this->eorror('排序失败！');
//            }
//        } else {
//            $this->error('非法请求！');
//        }
//    }

    /**
     * 颜色配置
     */
//    public function rankColor($type = 0)
//    {
//        $rankcolor = M('RankColor');
//        if (IS_POST) {
//            $color = I('color');
//            $ftcolor = I('ftcolor');
//            $rank = I('rank');
//            $len = count($color);
//            for ($i = 0; $i < $len; ++$i) {
//                if (!empty($color[$i]) || (!empty($ftcolor[$i]))) {
//                    if (!empty($color[$i])) {
//                        $data['bgcolor'] = $color[$i];
//                    }
//                    if (!empty($ftcolor[$i])) {
//                        $data['fontcolor'] = $ftcolor[$i];
//                    }
//                    $data['create_time'] = time();
//                    $res = $rankcolor->where(array('rank' => $rank[$i], 'types' => $type))->getField('id');
//                    if ($res) {
//                        $rankcolor->where(array('id' => $res))->save($data);
//                    } else {
//                        $data['rank'] = $rank[$i];
//                        $data['types'] = $type;
//                        $rankcolor->add($data);
//                    }
//                }
//            }
//            $this->success('配置成功');
//        } else {
//            if ($type == 0) {
//                $reg_type_arr = user_level_bonus_format(get_bonus_rule('level_money'));
//                foreach ($reg_type_arr as &$v) {
//                    $v['4'] = get_userrank($v['1']);
//                    $v['5'] = $rankcolor->where(array('rank' => $v['1'], 'types' => $type))->getField('bgcolor');
//                    $v['6'] = $rankcolor->where(array('rank' => $v['1'], 'types' => $type))->getField('fontcolor');
//                }
//            } else {
//                $r_type = get_bonus_rule('update_regtype');
//                $arr[0] = array('1' => '0');
//                $reg_type_arr = array_merge($arr, user_level_bonus_format($r_type));
//                foreach ($reg_type_arr as &$v) {
//                    $v['4'] = get_regtype($v['1']);
//                    $v['5'] = $rankcolor->where(array('rank' => $v['1'], 'types' => $type))->getField('bgcolor');
//                    $v['6'] = $rankcolor->where(array('rank' => $v['1'], 'types' => $type))->getField('fontcolor');
//                }
//            }
//            $this->assign('reg_type', $reg_type_arr);
//            $this->assign('type', $type);
//            $this->meta_title = '颜色配置';
//            $this->display();
//        }
//    }

    /**
     * 会员职务颜色配置
     */
//    public function regtypeColor()
//    {
//        $rankcolor = M('RankColor');
//        if (IS_POST) {
//            $color = I('color');
//            $ftcolor = I('ftcolor');
//            $rank = I('rank');
//            $len = count($color);
//            for ($i = 0; $i < $len; ++$i) {
//                if (!empty($color[$i]) || (!empty($ftcolor[$i]))) {
//                    if (!empty($color[$i])) {
//                        $data['bgcolor'] = $color[$i];
//                    }
//                    if (!empty($ftcolor[$i])) {
//                        $data['fontcolor'] = $ftcolor[$i];
//                    }
//                    $data['create_time'] = time();
//                    $res = $rankcolor->where(array('rank' => $rank[$i], 'types' => 1))->getField('id');
//                    if ($res) {
//                        $rankcolor->where(array('id' => $res))->save($data);
//                    } else {
//                        $data['rank'] = $rank[$i];
//                        $rankcolor->add($data);
//                    }
//                }
//            }
//            $this->success('配置成功');
//        } else {
//            $r_type = get_bonus_rule('update_regtype');
//            $arr[0] = array('1' => '0');
//            $reg_type_arr = array_merge($arr, user_level_bonus_format($r_type));
//            foreach ($reg_type_arr as &$v) {
//                $v['4'] = get_regtype($v['1']);
//                $v['5'] = $rankcolor->where(array('rank' => $v['1'], 'types' => 1))->getField('bgcolor');
//                $v['6'] = $rankcolor->where(array('rank' => $v['1'], 'types' => 1))->getField('fontcolor');
//            }
//
//
//            $this->assign('reg_type', $reg_type_arr);
//            $this->meta_title = '职务颜色配置';
//            $this->display();
//        }
//    }
}
